package JZOffer;

/**
 * 剑指 Offer 42. 连续子数组的最大和
 * 输入一个整型数组，数组中的一个或连续多个整数组成一个子数组。
 * 求所有子数组的和的最大值。
 *
 * 要求时间复杂度为O(n)。
 * **/

class Solution42_1 {
    public int maxSubArray(int[] nums) {
        int[] memo = new int[nums.length];
        int max = nums[0];
        memo[0] = nums[0];

        for (int i = 1; i < nums.length; i++) {
            memo[i] = Math.max(nums[i],memo[i-1] + nums[i]);
        }

        for (int i = 0; i < memo.length; i++) {
            max = Math.max(max, memo[i]);
        }
        return max;
    }
}
